/**
 * @file SelectPoll.h
 * @author Lost
 * @date 五月 2018
 * @brief 
 * 基于Select轮询类
 */

#include "Poll.h"

#include <sys/select.h> 
#include <sys/time.h>

/**
 * @brief 基于Select轮询类
 */
class CSelectPoll : public CPoll
{
public:
    CSelectPoll();
    ~CSelectPoll();
public:
    /**
    * @brief 初始化
    */
    virtual bool Init(const int iReadySize);

    /**
     * @brief 添加读套接字
     */
    virtual bool AddReadSocket(const int iSocket);

    /**
     * @brief 删除读套接字
     */
    virtual void RemoveReadSocket(const int iSocket);

    /**
     * @brief 添加写套接字
     */
    virtual bool AddWriteSocket(const int iSocket);

    /**
     * @brief 删除写套接字
     */
    virtual void RemoveWriteSocket(const int iSocket);

    /**
     * @brief 检测网络事件
     */
    virtual int Polling(int iWaitTime);

    /**
     * @brief 获取名字
     */
    virtual const char *GetName();

private:
    /*!< 写套接字集合 */
    fd_set m_stWriteFdSet;
    
    /*!< 读套接字集合 */
    fd_set m_stReadFdSet;

    /*!< 最大套接字 */
    int m_iMaxSocket;

    /*!< 套接字数量 */
    int m_iSocketCount;
};

